// 真正存放数据的地方。
// 要读写数据，只能通过mutation或action中提供的方法进行操作
const paperAnswerKey = 'paperAnswer'
const state = {
  paperAnswers: JSON.parse(localStorage.getItem(paperAnswerKey)) || []
}

// 编写对数据进行操作的方法，只能是同步的方法
// 调用时使用 this.$store.commit("module/mutation", 参数)，参数可以是对象，并且对象是引用类型的参数
const mutations = {
  // 将答案暂存
  WRITE_ANSWER: (state, { qid, answer }) => {
    let found = false
    console.log('get answer:', qid, answer)
    for (let i = 0; i < state.paperAnswers.length; i++) {
      // 若存在则更新
      if (state.paperAnswers[i].qid === qid) {
        state.paperAnswers[i].answer = answer
        console.log('answer changed to:', state.paperAnswers[i])
        found = true
        break
      }
    }
    const ans = { qid: qid, answer: answer }
    if (!found) {
      // 若不存在则新增
      if (state.paperAnswers.length === 0) state.paperAnswers = [ans]
      else state.paperAnswers.push(ans)
      console.log('new answer count:', state.paperAnswers.length)
    }

    // 存入 Storage
    localStorage.setItem(paperAnswerKey, JSON.stringify(state.paperAnswers))
    console.log('answer saved.')
  }
}

// 同样是存放对数据进行操作的方法，不过这个可以是异步的方法。
// 调用时使用 this.$store.dispatch("module/actions", 参数)，参数可以是对象，并且对象是引用类型的参数
// 为了区分开来，mutations的命名用全大写，而action的命名则是驼峰命名。
const actions = {
  changeSetting({ commit }, data) {}
}

// 导出为模块
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
